package org.example.generator;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;
import org.example.model.MainTemplateConfig;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * 动态代码生成器
 * @author ricejson
 */
public class DynamicGenerator {
    public static void main(String[] args) throws TemplateException, IOException {
        // 定义数据模型对象
        MainTemplateConfig dataModel = new MainTemplateConfig();
        dataModel.setLoop(true);
        dataModel.setAuthor("ricejson");
        dataModel.setOutputText("hello");
        String projectPath = System.getProperty("user.dir"); // 项目路径
        String templateRootPath = projectPath + File.separator +
                "rice-generator-basic" + File.separator +
                "src/main/resources/templates"; // 模板根路径
        String destPath = projectPath; // 目标路径
        // 动态代码生成
        deGenerator(templateRootPath, destPath, dataModel);
    }

    public static void deGenerator(String srcPath, String destPath, Object dataModel) throws IOException, TemplateException {
        // 创建configuration对象并设置版本号
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
        // 设置模板目录位置
        configuration.setDirectoryForTemplateLoading(new File(srcPath));
        // 设置默认编码格式
        configuration.setDefaultEncoding("utf-8");
        // 获取模板对象
        Template template = configuration.getTemplate("MainTemplate.java.ftl");
        Writer fileWriter = new FileWriter(destPath);
        // 进行生成
        template.process(dataModel, fileWriter);
        // 关闭流
        fileWriter.close();
    }
}
